package main

import (
	"database/sql"
	"fmt"
	"log"

	"net/http"

	"github.com/gin-gonic/gin"
	_ "github.com/go-sql-driver/mysql"
)

// 定义一个全局变量
var db *sql.DB

// 定义初始化数据库的函数
func initDB() (err error) {
	dsn := "root:root@tcp(127.0.0.1:3306)/ginsql?charset=utf8mb4&parseTime=True"
	db, err = sql.Open("mysql", dsn)
	if err != nil {
		fmt.Println("db err:", err)
		return err
	}
	//与数据库连接
	err = db.Ping()
	if err != nil {
		fmt.Println("连接数据库失败", err)
		return err
	}
	return nil
}

func main() {
	r := gin.Default()
	//调用函数
	err := initDB()
	if err != nil {
		fmt.Println("init db failed:", err)
		return
	}
	fmt.Println("连接数据库成功")
	// constr := "root:root@tcp(127.0.0.1:3306)/new"

	// db, err := sql.Open("mysql", constr) //返回mysql实例db
	// if err != nil {
	// 	log.Panic(err.Error())
	// 	return
	// }

	// //插入数据
	// _, err = db.Exec("insert into user(name,age) values(?,?);", "张三", 18)
	// if err != nil {
	// 	log.Panic(err.Error())
	// 	return
	// } else {
	// 	fmt.Println("插入成功")
	// }
	r.LoadHTMLGlob("templates/**/*")
	r.GET("/ping", func(c *gin.Context) {
		firsname := c.DefaultQuery("firsname", "Guest")
		// c.JSON(200, gin.H{
		// 	"message": "pong",
		// })
		c.HTML(http.StatusOK, "index.html", gin.H{
			"firsname": "hhhowo",
		})
		c.String(http.StatusOK, "hello %s ", firsname)
	})

	r.GET("/index/index", func(c *gin.Context) {

		firsname := c.DefaultQuery("firsname", "guest")
		name := topName(firsname)

		// //插入数据
		_, err = db.Exec("insert into user(name,age) values(?,?);", "张三", 18)
		if err != nil {
			log.Panic(err.Error())
			return
		} else {
			fmt.Println("插入成功")
		}

		c.JSON(200, gin.H{
			"firsname": firsname,
			"name":     name,
		})
		// c.HTML(http.StatusOK, "index/index.html", gin.H{
		// 	"firsname": firsname,
		// 	"name":     name,
		// })

		// c.HTML(http.StatusOK ,"/index/index.html"),gin.H{
		// 	// "firsname" : "%s", firfirsname
		// }

	})

	r.Run(":8000") // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

func topName(firsname string) (name string) {

	// fmt.Printf("这是打印：%s", name)
	name = firsname
	return
}
